/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ctrl.jeu;

import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.Serializable;
import javax.swing.ImageIcon;
 /*
 * @author Willy KONGUEM
 */
public class Carte implements Serializable{
    private String Numero; // as,2, 3, ..., K
    private Couleur Color; // coeur, trefle, pique, carreaux
    private int Valeur ; // poids de chaque carte

    public Carte(String Numero, Couleur Color) {
        this.Numero = Numero;
        this.Color = Color;

        try{
            Integer conv=new Integer(Numero);
            this.Valeur=conv.intValue();
        }
        catch(NumberFormatException e)
        {
            if(getNumero().equals("J")) this.Valeur=11;
            else if(getNumero().equals("Q")) this.Valeur=12;
            else if(getNumero().equals("K")) this.Valeur=13;
            else if(getNumero().equals("A")) this.Valeur=14;
        }
    }

    public Couleur getCouleur() {
        return Color;
    }

    public void setCouleur(Couleur Color) {
        this.Color = Color;
    }


    public String getNumero() {
        return Numero;
    }

    public void setNumero(String Numero) {
        this.Numero = Numero;
    }

    public int getValeur() {
        return Valeur;
    }

    public void setValeur(int Valeur) {
        this.Valeur = Valeur;
    }


    @Override
    public String toString() {
        return getNumero()+" de "+getCouleur();
    }

    public void AfficheGros(Container cont,int x ,int y)
    {
        // tracé du polygone qui designe la carte
        Graphics g=cont.getGraphics();
        g.setColor(java.awt.Color.WHITE);
        g.fillRoundRect(x,y, 60, 100,20,20);
        g.setColor(java.awt.Color.BLACK);
        g.drawRoundRect(x,y, 60, 100,20,20);

        // insertion de l'image situé au centre
        ImageIcon imgi=new javax.swing.ImageIcon(getClass().getResource("/img/"+Color.getImage()));
        Image image = imgi.getImage();
        g.drawImage(image,x+10, y+30,40,50,cont);

        // affichage des numero des 2 cotés de la carte
        Font fonte = new Font("TimesRoman",Font.BOLD,13);
        g.setFont(fonte);
        g.drawString(getNumero(), x+5, y+15);
        g.drawString(getNumero(), x+50, y+92);
    }

    public void AfficheMini(Container cont,int x ,int y)
    {
        // tracé du polygone qui designe la carte
        Graphics g=cont.getGraphics();
        g.setColor(java.awt.Color.WHITE);
        //g.fillRoundRect(x,y, (60/3)+5, (100/3)+5,20/3,20/3);
        g.fillRoundRect(x,y, (40)+5, (60)+5,20/3,20/3);
        g.setColor(java.awt.Color.BLACK);
        //g.drawRoundRect(x,y, (60/3)+5, (100/3)+5,20/3,20/3);
        g.drawRoundRect(x,y, (40)+5, (60)+5,20/3,20/3);

        // insertion de l'image situé au centre
        ImageIcon imgi=new javax.swing.ImageIcon(getClass().getResource("/img/"+Color.getImage()));
        Image image = imgi.getImage();
        //g.drawImage(image,x+(15/3), y+(30/3),(40/3),(50/3),cont);
        g.drawImage(image,x+(13), y+(21),(40/2),(50/2),cont);

        // affichage des numero des 2 cotés de la carte
        Font fonte = new Font("TimesRoman",Font.BOLD,14);
        g.setFont(fonte);
        g.drawString(getNumero(), x+(5), y+(8)+5);
        //g.drawString(getNumero(), x+(50/3), y+(92/3)+5);
        g.drawString(getNumero(), x+(33), y+(58));
    }

    public void AfficheDos(Container cont,int x ,int y)
    {
        // tracé du polygone qui designe la carte
        Graphics g=cont.getGraphics();

        // insertion de l'image situé au centre
        ImageIcon imgi=new javax.swing.ImageIcon(getClass().getResource("/img/dos.jpg"));
        Image image = imgi.getImage();
        g.drawImage(image,x, y,40,60,cont);
        
    }

    public static Carte[] getSimplePaire(Carte[] card)
    {
        Carte[] fin=new Carte[2];
        int max=0;
        for(int i=0;i<card.length-1;i++)
        {
            for(int j=i+1;j<card.length;j++)
            {
                if(card[i].getValeur()==card[j].getValeur())
                {
                    if(card[i].getValeur()>max)
                    {
                        fin[0]=card[i];
                        fin[1]=card[j];
                        max=card[i].getValeur();
                    }
                }
            }
        }
        return fin;
    }

    public static Carte[] getDoublePaire(Carte[] card)
    {
        Carte[] fin=new Carte[4];
        int max=0;
        for(int i=0;i<card.length-1;i++)
        {
            for(int j=i+1;j<card.length;j++)
            {
                if(card[i].getValeur()==card[j].getValeur())
                {
                    if(card[i].getValeur()>max)
                    {
                        if(fin[0]==null)
                        {
                            fin[0]=card[i];
                            fin[1]=card[j];
                        }
                        else
                        {
                            fin[2]=card[i];
                            fin[3]=card[j];
                            // ont trie le tableau fin par ordre décroissant
                            if(fin[0].getValeur()<fin[2].getValeur())
                            {
                                Carte temp1,temp2;
                                temp1=fin[0];
                                temp2=fin[1];
                                fin[0]=fin[2];
                                fin[1]=fin[3];
                                fin[2]=temp1;
                                fin[3]=temp2;
                            }
                            max=fin[2].getValeur();
                        }
                    }
                }
            }
        }
        return fin;
    }

    public static Carte[] getBrelan(Carte[] card)
    {
        Carte[] fin=new Carte[3];
        int max=0;
        if(card.length>=3)
        for(int i=0;i<card.length-2;i++)
        {
            for(int j=i+1;j<card.length-1;j++)
            {
                for(int k=j+1;k<card.length;k++)
                {
                    if(card[i].getValeur()==card[j].getValeur()&&card[i].getValeur()==card[k].getValeur())
                    {
                        if(card[i].getValeur()>max)
                        {
                            fin[0]=card[i];
                            fin[1]=card[j];
                            fin[2]=card[k];
                            max=card[i].getValeur();
                        }
                    }
                }
            }
        }
        return fin;
    }

    public static Carte[] getFull(Carte[] card)
    {
        Carte[] fin=new Carte[5];
        Carte[] p1=getBrelan(card);
        Carte[] p2=new Carte[2];
        if(p1[0]==null) return fin;
        else{
            Carte[] remain=card;
            // on supprime les carte contenues dans le brelan
            for(int i=0;i<remain.length;i++)
            {
                for(int j=0;j<p1.length;j++)
                {
                    if(remain[i].equals(p1[j]))
                    {
                        remain[i]=null;
                    }
                }
            }
            p2=getSimplePaire(remain);
            if(p2[0]==null) return fin;
            else
            {
                // on rassemble p1 et p2
                int i=0;
                for(int j=0;j<3;j++,i++) fin[i]=p1[j];
                for(int j=0;j<2;j++,i++) fin[i]=p2[j];
            }
        }
        return fin;
    }

    public static void main(String[] a)
    {
         
    }
}
